#include <iostream>
#include <string>
#include <cmath>
#include <limits>

class Solution {
public:
    int strToInt(std::string str) {
        //  0. 判断是否为空
        if(str.empty()) return 0;
        //  1. 判断第一个符号的正负号
        bool sign = true; // true 正
        if(str[0] == '-') sign = false;
        //  如果不是正号并且不是0～9的数字
        else if(str[0] != '+' && (str[0]-'0'>9 || str[0]<'0')) return 0;
        
        int64_t nums = 0;
        //  2. 开始遍历后面的字符, 从小往大遍历
        for(int i=str.size()-1; i>=0; i--){
            //  如果第一个字符  并且是正号则跳过
            if(i==0 && str[0] == '+') continue;
            if((str[i]-'0'>9 || str[i]<'0')) return 0;
            nums += int(str[i]-'0') * std::pow(10, (str.size()-1-i));
            //  如果溢出
            if( (sign && nums > std::numeric_limits<int>::max()) 
                || (!sign && nums < std::numeric_limits<int>::min())) return 0;
        }
        return nums;
    }
};

int main(int argc, char** argv)
{

    Solution obj;
    std::cout << obj.strToInt("12873192469124619287318236192361923619283719") << std::endl;
    std::cout << obj.strToInt("32523") << std::endl;
    std::cout << obj.strToInt("sdrfwq3341") << std::endl;

    return 0;
}